package com.louis.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.louis.json.JsonViewer;

/**
 * 
 * <p>
 * 可以用Json标记类或者类的属性. 会在JsonView中被解析
 * </p>
 * 当Json标记一个类,并且该类作为其他类的属性,而属性上也被Json标记,此时属性上的Json的优先级高于类本身Json的优先级
 * 
 * @see JsonViewer
 * 
 * @author louis
 * 
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD })
public @interface Json {

	/**
	 * 当属性的值为null的时候,是否将该属性解析到json中,默认为true
	 * 
	 * @return true解析到,false不解析到
	 */
	boolean nullField() default true;

	/**
	 * 当属性为transient时候,是否将该属性解析到json中,默认为true
	 * 
	 * @return true解析到,false不解析到
	 */
	boolean transientField() default true;

	/**
	 * 
	 * 被解析到json的属性,默认为{},优先级高于excludeFields
	 * 
	 * @see #excludeFields
	 * 
	 * @return
	 */
	String[] includeFields() default {};

	/**
	 * 不会被解析到json中的属性,默认为{},优先级低于includeFields
	 * 
	 * @see #includeFields
	 * @return
	 */
	String[] excludeFields() default {};

	/**
	 * 
	 * 此属性用于当Json标记一个属性的时候
	 * 
	 * @return
	 */
	boolean isContinue() default false;
}
